/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.autosalon.ui.customer.action;

import com.autosalon.DAO.DaoFactory;
import com.autosalon.model.Adresa;
import com.autosalon.model.Role;
import com.autosalon.model.Zakaznik;
import com.autosalon.tools.Constants;
import com.autosalon.ui.customer.Customer;
import com.autosalon.ui.customer.state.CustomerStateHolder;
import com.vaadin.ui.Button.ClickEvent;
import com.vaadin.ui.Component;
import com.vaadin.ui.Form;
import com.vaadin.ui.TextField;
import com.vaadin.ui.Window.Notification;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

/**
 *
 * @author Kubík
 */
public class SaveNewCustomerAction extends AbstractCustomerAction {

    public SaveNewCustomerAction(Customer customer) {
        super(customer);
    }

    @Override
    public void buttonClick(ClickEvent event) {
        String password = customer.getTexPassword().getValue().toString();
        String controlPassword = customer.getTexControlPassword().getValue().toString();
        if (!password.equals(controlPassword)) {
            customer.getSwitcher().getWindow().showNotification("Zadané hesla nejsou stejné");
            return;
        }
        Zakaznik zakaznik = new Zakaznik();
        //jméno
        if (!customer.getTexFirstName().getValue().toString().isEmpty()) {
            try {
                zakaznik.setMeno(customer.getTexFirstName().getValue().toString());
            } catch (Exception e) {
                customer.getSwitcher().getWindow().showNotification("Vstupní data v kolonce jméno neodpovídají.");
                return;
            }
        } else {
            customer.getSwitcher().getWindow().showNotification("Chybí data v kolonce jméno.");
            return;
        }
        //príjmení
        if (!customer.getTexLastName().getValue().toString().isEmpty()) {
            try {
                zakaznik.setPrimeni(customer.getTexLastName().getValue().toString());
            } catch (Exception e) {
                customer.getSwitcher().getWindow().showNotification("Vstupní data v kolonce příjmení neodpovídají.");
                return;
            }
        } else {
            customer.getSwitcher().getWindow().showNotification("Chybí data v kolonce příjmení.");
            return;
        }
        //password
        if (!customer.getTexPassword().getValue().toString().isEmpty()) {
            try {
                zakaznik.setPassword(password);
            } catch (Exception e) {
                customer.getSwitcher().getWindow().showNotification("Vstupní data v kolonce heslo neodpovídají.");
                return;
            }
        } else {
            customer.getSwitcher().getWindow().showNotification("Chybí data v kolonce heslo.");
            return;
        }
        //mobil
        if (!customer.getTexMobil().getValue().toString().isEmpty()) {
            try {
                zakaznik.setMobil(customer.getTexMobil().getValue().toString());
            } catch (Exception e) {
                customer.getSwitcher().getWindow().showNotification("Vstupní data v kolonce mobil neodpovídají.");
                return;
            }
        } else {
            customer.getSwitcher().getWindow().showNotification("Chybí data v kolonce mobil.");
            return;
        }
        //email
        if (!customer.getTexEmail().getValue().toString().isEmpty()) {
            try {
                zakaznik.setEmail(customer.getTexEmail().getValue().toString());
            } catch (Exception e) {
                customer.getSwitcher().getWindow().showNotification("Vstupní data v kolonce email neodpovídají.");
                return;
            }
        } else {
            customer.getSwitcher().getWindow().showNotification("Chybí data v kolonce email.");
            return;
        }
        //poznamka
        if (!customer.getTexNote().getValue().toString().isEmpty()) {
            zakaznik.setPoznamka(customer.getTexNote().getValue().toString());
        }
        String propRole = "customer";
        if (customer.getComRole().isSelected("Seller")) {
            propRole = "Seller";
            customer.getComRole().select("customer");
        }
        try {
            Role role = (Role) DaoFactory.getinstance().getRole().getOneByParam(Constants.DB_ROLE_NAME, propRole);
            zakaznik.setRole(role);
        } catch(Exception e) {
            customer.getSwitcher().getWindow().showNotification("Nepodařilo se načíst data z databáze");
            return;
        }
        List<Adresa> adress = new ArrayList<Adresa>();
        try {
            for (Iterator<Form> formsIt = customer.getNewAdress().iterator(); formsIt.hasNext();) {
                Form form = formsIt.next();
                Iterator<Component> componentIt = form.getLayout().getComponentIterator();
                Adresa adresa = new Adresa();
                componentIt.next();
                TextField stat = (TextField) componentIt.next();
                TextField mesto = (TextField) componentIt.next();
                TextField ulice = (TextField) componentIt.next();
                TextField cisloPopisne = (TextField) componentIt.next();
                TextField cisloOrientacni = (TextField) componentIt.next();
                TextField psc = (TextField) componentIt.next();
                adresa.setStat(stat.getValue().toString());
                adresa.setMesto(mesto.getValue().toString());
                adresa.setUlice(ulice.getValue().toString());
                adresa.setCp(Integer.parseInt(cisloPopisne.getValue().toString()));
                adresa.setCo(Integer.parseInt(cisloOrientacni.getValue().toString()));
                adresa.setPsc(psc.getValue().toString());
                adress.add(adresa);
            }
            zakaznik.setAdresy(adress);
        } catch(Exception e) {
            customer.getSwitcher().getWindow().showNotification("Nepodařilo se načíst data adresy");
            return;
        }
        try {
            DaoFactory.getinstance().getZakaznik().insert(zakaznik);
        } catch(Exception e) {
            customer.getSwitcher().getWindow().showNotification("Nepodařilo se uložit data do databáze");
            return;
        }
        customer.getWindow().showNotification("Registrace proběhla úspěšně", Notification.TYPE_WARNING_MESSAGE);
        int id;
        try {
            id = customer.getSwitcher().getMainWindow().getZakaznik().getRole().getId().intValue();
        } catch (NullPointerException e) {
            id = 1;
        }
        CustomerStateHolder.setState(CustomerStateHolder.SAVE_CUSTOMER_STATE, id, customer);
    }
}
